// 主要用于封装基于axios配置的get/post/put/delete等使用方法。封装axios的get、post方法，其余关于接口调用的方法也可写入该文件中，便于管理。
/**
 * 后端使用@RequestParam来接收参数，前端用axios的post方式传数据。但是一直报错400，请求无效。
 * @RequestParam接收的请求头格式为：application/x-www-form-urlencoded
 * 开始以为是post没有配置content-Type请求头，然而我已经配置了。后来几经Google才发现，post传参的默认格式是json格式，所以才会一直报错。
 * 然后引入了qs模块，利用qs.stringify()方法将json对象系列化为URL形式，然后就愉快的解决啦。
 * 当然还有其他解决方法就是不使用@RequestParam接收，直接用request的getParams()来接收。或者使用@RequestBody注解。
 */
// request.ts
import axios from "./index";
import qs from "qs";

export default class Request{
    /**
     * get方法
     * @param {string} url 路径
     */
    static get = (url: string) => {
        return new Promise((resolve, reject) => {
            axios.get(url).then(res => {
                resolve(res);
            }).catch(err => {
                reject(err);
            })
        })
    }

    /**
     * post方法
     * @param {string} url 路径
     * @param {object} params 参数
     */
    static post = (url: string, params?: any) => {
        //console.log(params)
        return new Promise((resolve, reject) => {
            axios.post(url, params).then(res => {
                resolve(res);
            }).catch(err => {
                reject(err);
            })
        })
    }
    /**
     * get方法
     * @param {string} url 路径
     * @param {object} params 参数
     */
    static get_qs = (url: string, params?: any) => {
        return new Promise((resolve, reject) => {
            axios.get(url, { params: qs.stringify(params) }).then(res => {
                resolve(res);
            }).catch(err => {
                reject(err);
            })
        })
    }

    /**
     * post方法
     * @param {string} url 路径
     * @param {object} params 参数
     */
    static post_qs = (url: string, params: any) => {
        return new Promise((resolve, reject) => {
            axios.post(url, qs.stringify(params)).then(res => {
                resolve(res);
            }).catch(err => {
                reject(err);
            })
        })
    }
    /**
     * @name: 封装axios get方法
     * @desc: 描述
     * @param url 请求连接
     * @param params 请求参数
     * @param callback 回调方法
     */
    static get_callback = (url: string, params: any, callback: any) => {
        return new Promise((resolve, reject) => {
            axios.get(url, { params: params }).then(res => {
                callback ? resolve(callback(res.data)) : resolve(res.data);
            }).catch(err => {
                reject(err);
            })
        })
    }

    /**
     * @name: 封装axios post方法
     * @desc: 描述
     * @param url 请求连接
     * @param params 请求参数
     * @param callback 回调方法
     */
    static post_callback = (url: string, params: any, callback: any) => {
        return new Promise((resolve, reject) => {
            axios.post(url, qs.stringify(params)).then(res => {
                callback ? resolve(callback(res.data)) : resolve(res.data);
            }).catch(err => {
                reject(err);
            })
        })
    }

    /**
     * @name: put请求封装
     * @param url 请求连接
     * @param params 请求参数
     * @param callback 回调方法
     */
    static put_callback = (url: string, params: any, callback: any) => {
        return new Promise((resolve, reject) => {
            axios.put(url, params).then(res => {
                callback ? resolve(callback(res.data)) : resolve(res.data);
            }).catch(err => {
                reject(err);
            })
        })
    }

}

